#pragma once

/*!
\class App
\brief Application main class

Manages the whole application, handles initialization, shutdown and main loop
*/
class App
{
public:
    //! Constructor
    App(void);
    //! Destructor
    ~App(void);

    /*!
    Initialization actions, including opening main window
    \return Wether initialization has been successful
    \attention On successful initialization, _bInitialized is set to true
    */
    bool init(void);

    /*!
    Shutdown actions
    \attention Will be called at destructor when not called explicitly
    */
    void shutdown(void);

    /*!
    Main loop. Returns when application ends.
    */
	void run(void);

private:
    //! Shows if class is properly initialized
    bool m_bInitialized;
    //! Shows if app is effectively running
    bool m_bRunning;

    /*!
        App timer. Shows number of seconds since glfwInit was called.
        \attention Meaningless if app isn't initialized
    */
    double m_timer;
};
